// 该程序为一个使用线程属性来传递线程分离状态的实例，其没有使用线程分离函数pthread_detach，而是通过修改线程的属性以实现线程分离
/* 代码首先定义了线程属性对象thread_attr，然后调用pthread_attr_init函数对该属性对象进行初始化，
 * 使用pthread_attr_setdetachstate将属性设置为分离状态，并且在创建新线程的时候将该属性对象传递给新线程；
 * threaddeal函数是新线程的入口处理函数，其首先输出一个车字符串表明当前正在执行线程，然后调用sleep函数休眠3秒之后再次输出字符串表明即将退出，
 * 并且将一个标志位thread_flag的状态修改为FALSE；主程序在创建了新线程之后等待该标志位状态改变，然后退出
 * */

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

#define FALSE 0
#define TRUE 1

int pthread_flag = TRUE;

void *threaddeal(void *rsg)
{
	printf("正在执行线程!...\n");
	sleep(3);
	printf("即将退出线程!...\n");
	pthread_flag = FALSE;
	pthread_exit(NULL);
}

int main(void){
	
	// 定义线程属性对象thread_attr
	pthread_attr_t pthattr;

	//void pthread_flag = TRUE;

	pthread_t pthdid;
	
	// 调用pthread_attr_init函数对属性进行初始化
	pthread_attr_init(&pthattr);

	// 调用pthread_attr_setdetachstate函数将其设置为分离状态
	pthread_attr_setdetachstate(&pthattr, PTHREAD_CREATE_DETACHED);

	// 创建线程
	if( pthread_create(&pthdid, &pthattr, threaddeal, NULL) != 0){
		printf("创建线程失败!\n");
		exit(0);
	}else{
		while(pthread_flag){
			printf("...等待线程结束...!\n");
			sleep(1);
		}
	}

	return 0;
}
